package com.sunxiansheng.user.convert;

import com.sunxiansheng.user.entity.dto.SysUserDto;
import com.sunxiansheng.user.entity.page.PageResult;
import com.sunxiansheng.user.entity.po.SysUserPo;
import com.sunxiansheng.user.entity.req.SysUserReq;
import com.sunxiansheng.user.entity.vo.SysUserVo;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * Description: SysUser(转换器)
 * @Author sun
 * @Create 2024-07-18 16:59:16
 * @Version 1.0
 */
@Mapper
public interface SysUserConvert {

    // 生成一个具体的对象逻辑
    SysUserConvert INSTANCE = Mappers.getMapper(SysUserConvert.class);

    // ============================== Req与Dto的转换 ==============================
    SysUserDto convertReqToDto(SysUserReq Req);

    SysUserReq convertDtoToReq(SysUserDto Dto);
    // ============================== Req与Dto的转换 ==============================

    // ============================== Dto与Po的转换 ==============================
    SysUserDto convertPoToDto(SysUserPo Po);

    SysUserPo convertDtoToPo(SysUserDto Dto);
    // ============================== Dto与Po的转换 ==============================

    // ============================== Po与Vo的转换 ==============================
    SysUserVo convertPoToVo(SysUserPo Po);

    SysUserPo convertVoToPo(SysUserVo Vo);

    List<SysUserVo> convertPoToVoList(List<SysUserPo> PoList);

    List<SysUserPo> convertVoToPoList(List<SysUserVo> VoList);
    // ============================== Po与Vo的转换 ==============================

    // ============================== PageResult的转换 ==============================
    default PageResult<SysUserVo> convertPageResult(PageResult<SysUserPo> pageResultPo) {
        if (pageResultPo == null) {
            return null;
        }
        List<SysUserVo> voList = convertPoToVoList(pageResultPo.getResult());

        return new PageResult.Builder<SysUserVo>()
                .pageNo(pageResultPo.getPageNo())
                .pageSize(pageResultPo.getPageSize())
                .total(pageResultPo.getTotal())
                .result(voList)
                .build();
    }
    // ============================== PageResult的转换 ==============================
}
